// pages/exhibition-hall/exhibition-hall.js
const app = getApp();

Page({

  /**
   * 页面的初始数据
   */
  data: {
    bannerImages: [
      '/image/national -defenseimg/1.jpeg',
      '/image/national -defenseimg/2.jpeg',
      '/image/national -defenseimg/3.jpeg',
      '/image/national -defenseimg/4.jpeg',
      '/image/national -defenseimg/5.jpeg',
    ],
    currentTab: 'intro',
    introText: '  军事文化展览馆，顾名思义，是以军事为主题，并融入文化元素的展览场所。它不仅仅是陈列军事武器装备或历史事件的博物馆，更侧重于通过多元化的展示手法，向公众传递军事领域的文化内涵、精神价值以及历史意义。设立军事文化展览馆的首要目的是弘扬爱国主义精神。通过展示国家在不同历史时期所经历的军事斗争、取得的胜利以及涌现出的英雄人物，激发民族自豪感和爱国热情。同时，这也是普及国防知识的重要平台。展览馆通过通俗易懂的方式，介绍军事科技的发展、国防力量的构成以及国家安全的重要性，从而增强公民的国防意识和忧患意识。传承红色基因是军事文化展览馆的另一重要使命。它通过展示中国共产党领导下的军队的革命历程、光荣传统和优良作风，让参观者了解革命先辈的奋斗历程，感悟革命精神的时代价值，从而将红色基因代代相传。',
    whyText: '设立军事文化展览馆具有多重重要意义。首先，这是弘扬爱国主义精神的有效途径。通过展示国家军事发展的光辉历程和取得的伟大成就，能够激发民族自豪感，增强国民的爱国情怀。其次，展览馆是普及国防知识的重要平台，能够帮助公众了解国家安全的重要性、军事力量的构成以及国防科技的发展，从而提升全民的国防意识。此外，军事文化展览馆还承担着传承红色基因的使命。它通过展示革命战争年代的艰苦历程和英雄事迹，让后人铭记历史，学习先辈的革命精神和优良传统。同时，这些展览也为军事爱好者和研究者提供了宝贵的学习和研究资源。总而言之，设立军事文化展览馆对于加强国民思想政治教育、提升国家软实力和维护国家安全都具有不可替代的作用。',
    reserveInfoText: '预约军事文化展览馆通常非常便捷。首先，在本页面的底部导航栏中，点击“预约”按钮进入预约专区。您会看到当前可预约的展览列表及其剩余名额。选择您感兴趣且状态为“可预约”的展览，点击进入详情页面。然后，按照页面提示填写您的姓名、学号、联系电话和专业等必要信息，仔细核对无误后，点击“预约”按钮提交即可。预约成功后，您可能会收到确认通知，请按时前往参观。如果需要取消预约，可在预约成功后在页面上查找取消选项。',
    exhibitions: [],
    selectedExhibition: null,
    reservationData: {
      name: '',
      studentId: '',
      phone: '',
      major: ''
    },
    hasReserved: false,
    reservedExhibitionId: null,
    reservedExhibitionName: '',
    canCancel: true // 是否可以取消预约
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

    this.getExhibitionList(); // 页面加载时获取展览列表
    const studentId = wx.getStorageSync('studentId');
    if (studentId) {
      this.checkReservationStatus(); // 只有当 studentId 存在时才检查预约状态
    } else {
      console.log('用户未登录或未存储学号，跳过检查预约状态');
      // 可以在这里设置 hasReserved 为 false 等默认状态
      this.setData({
        hasReserved: false,
        reservedExhibitionId: null,
        reservedExhibitionName: '',
        canCancel: true
      });
      wx.removeStorageSync('exhibitionReservation');
    }
  },

  /**
   * 获取展览列表
   */
  getExhibitionList() {
    wx.request({
      url: `${app.globalData.baseUrl}/exhibition/list`, // 替换为你的后端API地址
      method: 'GET',
      success: (res) => {
        if (res.statusCode === 200 && Array.isArray(res.data.data)) {
          const exhibitions = res.data.data.map(item => ({
            ...item,
            startDateFormatted: this.formatDate(item.startDate),
            endDateFormatted: this.formatDate(item.endDate),
            statusText: this.getStatusText(item.status)
          }));
          // 对展览列表进行排序
          const sortOrder = [2, 0, 1]; // 对应 future, reservable, ended 的数字
          const sortedExhibitions = exhibitions.sort((a, b) => {
            return sortOrder.indexOf(a.status) - sortOrder.indexOf(b.status);
          });
          this.setData({
            exhibitions: sortedExhibitions
          });
        } else {
          wx.showToast({
            title: '获取展览列表失败',
            icon: 'none',
            duration: 2000
          });
          console.error('获取展览列表失败:', res);
        }
      },
      fail: (err) => {
        wx.showToast({
          title: '网络错误',
          icon: 'none',
          duration: 2000
        });
        console.error('获取展览列表网络错误:', err);
      }
    });
  },

  /**
   * 格式化日期数组为字符串
   */
  formatDate(dateArray) {
    if (Array.isArray(dateArray) && dateArray.length === 3) {
      const year = dateArray[0];
      const month = dateArray[1];
      const day = dateArray[2];
      return `${year}-${month}-${day}`;
    }
    return '';
  },

  /**
   * 根据状态码获取状态文字
   */
  getStatusText(status) {
    switch (status) {
      case 0:
        return '可预约';
      case 1:
        return '已结束';
      case 2:
        return '未来可预约';
      default:
        return '';
    }
  },

  /**
   * 检查用户是否已预约
   */
  checkReservationStatus() {
    const studentId = wx.getStorageSync('studentId'); // 从本地存储获取学号，你可能需要调整获取方式
    if (studentId) {
      wx.request({
        url: `${app.globalData.baseUrl}/exhibition/reservation-status?studentId=` + studentId, // 替换为你的后端API地址
        method: 'GET',
        success: (res) => {
          if (res.data.code === 200 && res.data.data) {
            this.setData({
              hasReserved: true,
              reservedExhibitionId: res.data.data.exhibitionId,
              reservedExhibitionName: res.data.data.exhibitionName,
              canCancel: !res.data.data.canceled // 根据后端返回的 canceled 状态设置 canCancel
            });
            wx.setStorageSync('exhibitionReservation', {
              exhibitionId: res.data.data.exhibitionId,
              exhibitionName: res.data.data.exhibitionName,
              canCancel: !res.data.data.canceled
            });
          } else {
            this.setData({
              hasReserved: false,
              reservedExhibitionId: null,
              reservedExhibitionName: '',
              canCancel: true
            });
            wx.removeStorageSync('exhibitionReservation');
          }
        },
        fail: (err) => {
          console.error('检查预约状态网络错误:', err);
        }
      });
    }
  },

  switchTab(e) {
    this.setData({
      currentTab: e.currentTarget.dataset.tab,
      selectedExhibition: null // 切换标签时清空选中的展览
    });
    if (e.currentTarget.dataset.tab === 'reservation') {
      this.getExhibitionList(); // 切换到预约标签时刷新展览列表
      this.checkReservationStatus(); // 切换到预约标签时检查预约状态
    }
  },

  selectExhibition(e) {
    const exhibitionId = parseInt(e.currentTarget.dataset.id);
    const selected = this.data.exhibitions.find(item => item.id === exhibitionId);
    if (selected && selected.status === 0) {
      this.setData({
        selectedExhibition: selected
      });
    } else if (selected) {
      wx.showToast({
        title: this.getStatusText(selected.status),
        icon: 'none',
        duration: 1500
      });
    }
  },

  inputName(e) {
    this.setData({
      'reservationData.name': e.detail.value
    });
  },

  inputStudentId(e) {
    this.setData({
      'reservationData.studentId': e.detail.value
    });
  },

  inputPhone(e) {
    this.setData({
      'reservationData.phone': e.detail.value
    });
  },

  inputMajor(e) {
    this.setData({
      'reservationData.major': e.detail.value
    });
  },

  submitReservation() {
    const {
      selectedExhibition,
      reservationData,
      hasReserved
    } = this.data;

    if (!selectedExhibition) {
      wx.showToast({
        title: '请选择要预约的展览',
        icon: 'none'
      });
      return;
    }

    if (hasReserved) {
      wx.showToast({
        title: '您已预约其他展览，无法再次预约',
        icon: 'none'
      });
      return;
    }

    if (!reservationData.name || !reservationData.studentId || !reservationData.phone || !reservationData.major) {
      wx.showToast({
        title: '请填写完整的预约信息',
        icon: 'none'
      });
      return;
    }

    if (selectedExhibition.reservedCount >= selectedExhibition.capacity) {
      wx.showToast({
        title: '该展览名额已满',
        icon: 'none'
      });
      return;
    }

    wx.request({
      url: `${app.globalData.baseUrl}/exhibition/reserve`, // 替换为你的后端API地址
      method: 'POST',
      data: {
        exhibitionId: selectedExhibition.id,
        ...reservationData
      },
      success: (res) => {
        if (res.statusCode === 200) {
          wx.showToast({
            title: '预约成功',
            icon: 'success',
            duration: 2000
          });
          this.setData({
            hasReserved: true,
            reservedExhibitionId: selectedExhibition.id,
            reservedExhibitionName: selectedExhibition.name,
            selectedExhibition: null,
            reservationData: {
              name: '',
              studentId: '',
              phone: '',
              major: ''
            }
          }, () => {
        
            // 存储预约信息
            wx.setStorageSync('exhibitionReservation', {
              exhibitionId: this.data.reservedExhibitionId,
              exhibitionName: this.data.reservedExhibitionName,
              canCancel: true,
              studentId:this.data.reservationData.studentId
            });
            this.getExhibitionList(); // 预约成功后刷新展览列表
            this.checkReservationStatus(); // 预约成功后检查预约状态
          });
        } else {
          wx.showToast({
            title: res.data.msg || '预约失败',
            icon: 'none',
            duration: 2000
          });
          console.error('预约失败:', res);
        }
      },
      fail: (err) => {
        wx.showToast({
          title: '网络错误',
          icon: 'none',
          duration: 2000
        });
        console.error('预约网络错误:', err);
      }
    });
  },

  cancelReservation() {
    const {
      reservedExhibitionId,
      canCancel
    } = this.data;
    const studentId = wx.getStorageSync('studentId'); // 获取学号

    if (!this.data.hasReserved) {
      wx.showToast({
        title: '您尚未进行预约',
        icon: 'none'
      });
      return;
    }

    if (!canCancel) {
      wx.showToast({
        title: '您已取消过一次预约，无法再次取消',
        icon: 'none'
      });
      return;
    }

    wx.showModal({
      title: '提示',
      content: '确定要取消预约吗？',
      success: (res) => {
        if (res.confirm) {
          wx.request({
            url: `${app.globalData.baseUrl}/exhibition/cancel-reserve`, // 替换为你的后端API地址
            method: 'POST',
            data: {
              exhibitionId: reservedExhibitionId,
              studentId: studentId // 传递学号给后端
            },
            success: (response) => {
              if (response.statusCode === 200) {
                this.setData({
                  hasReserved: false,
                  reservedExhibitionId: null,
                  reservedExhibitionName: '',
                  canCancel: false // 设置为已取消过
                }, () => {
                  wx.showToast({
                    title: '取消预约成功',
                    icon: 'success',
                    duration: 2000
                  });
                  wx.setStorageSync('exhibitionReservation', {
                    exhibitionId: this.data.reservedExhibitionId,
                    exhibitionName: this.data.reservedExhibitionName,
                    canCancel: false
                  });
                  this.getExhibitionList(); // 取消预约成功后刷新展览列表
                  this.checkReservationStatus(); // 取消预约成功后检查预约状态
                });
              } else {
                wx.showToast({
                  title: response.data.msg || '取消预约失败',
                  icon: 'none',
                  duration: 2000
                });
                console.error('取消预约失败:', response);
              }
            },
            fail: (err) => {
              wx.showToast({
                title: '网络错误',
                icon: 'none',
                duration: 2000
              });
              console.error('取消预约网络错误:', err);
            }
          });
        }
      }
    });
  }
})